package com.cskaoyan.javase.oop1._11static._1basic;

/**
 * static的原理
 * 宠物公司新进了一批同样颜色的猫，创建一个类描述这批宠物
 * 注：创建该类时，给出一个静态成员变量和一个静态成员方法
 *
 * static成员不依赖于创建对象,而是在类加载的过程中完成变量的初始化,方法指令的装载.
 * 随着类加载的完成,静态成员方法就可以调用了,静态成员变量就可以访问了.
 *
 * 思考:
 *      访问类的静态成员,会不会触发类加载?
 *      会
 * 访问类的静态成员,也是一种类加载的时机,一定会触发类加载.
 *
 * 类加载只有一次,所以静态的成员变量对于整个类来说都是独一份的,被全体对象所共享.
 *
 * @since 11:08
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        System.out.println(Cat.color);
        Cat.catchMouse();

        // 类加载只有一次,不会再触发类加载了
        Cat c = new Cat();
    }
}

class Cat {
    static String color = "白色";
    double price;

    public void eat() {
        System.out.println("吃猫粮");
    }

    public static void catchMouse() {
        System.out.println("大家都会抓老鼠");
    }
}